package br.com.decorando.dao;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.content.Context;
import android.util.Log;
import br.com.decorando.model.AcessoBanco;
import br.com.decorando.model.Carta;


public class CartaDAO {
	private Context context;
	private AcessoBanco acessoBanco = new AcessoBanco();
			
	public CartaDAO(Context context) {
		super();
		this.context = context;
	}
		
	public List<Carta> listarGeral(int idAssunto){
		List<Carta> cartas = new ArrayList<Carta>();
		String queryString = "Select cd_carta, nm_pergunta_carta, nm_resposta_carta from carta where cd_assunto = " + idAssunto;
		List<String[]> dados = acessoBanco.buscarDados(context, queryString, 3);
		for(String[] dado : dados){
			Carta carta = new Carta();		
			carta.setId(Integer.parseInt(dado[0]));
			carta.setPergunta(dado[1]);
			carta.setResposta(dado[2]);
			cartas.add(carta);
		}
		return cartas;
	}
	
	public Carta get(Carta carta){
		return get(carta.getId());
	}
	
	public Carta get(int id){			
		String queryString = "Select cd_carta, nm_pergunta_carta, nm_resposta_carta from carta where cd_carta = " + id;
		String[] dado = acessoBanco.buscarDados(context, queryString, 3).get(0);		
		Carta carta = new Carta();		
		carta.setId(Integer.parseInt(dado[0]));
		carta.setPergunta(dado[1]);
		carta.setResposta(dado[2]);
		return carta;			
	}
	public Carta getCartaParaRevisar(int idAssunto){			
		String queryString = "Select cd_carta, nm_pergunta_carta, nm_resposta_carta from Carta";
		queryString += " where cd_assunto = " + idAssunto + " order by dt_ultima_revisao_carta asc, cd_dificuldade desc limit 1";
		String[] dado = acessoBanco.buscarDados(context, queryString, 3).get(0);		
		Carta carta = new Carta();		
		carta.setId(Integer.parseInt(dado[0]));
		carta.setPergunta(dado[1]);
		carta.setResposta(dado[2]);
		return carta;			
	}
	
	public void save(Carta carta){
		int id = maxId() + 1;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String date = sdf.format(new Date());
		StringBuilder builder = new StringBuilder("Insert into carta(cd_carta, nm_pergunta_carta, nm_resposta_carta, dt_criacao_carta, " +
				"dt_ultima_revisao_carta, ic_carta_ativa, cd_assunto, cd_dificuldade) ");
		builder.append(" Values(").append(id).append(",'").append(carta.getPergunta()).
		append("','").append(carta.getResposta()).append("','").append(date).append("','").append(date).
		append("',1,").append(carta.getIdAssunto()).append(",").append(carta.getDificuldade()).append(")");		
		String message = acessoBanco.comandoDML(context, builder.toString());				
	}
	
	public void update(Carta carta){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String date = sdf.format(carta.getDataUltimaRevisao());
		StringBuilder builder = new StringBuilder("Update carta ");
		builder.append(" set nm_pergunta_carta = '").append(carta.getPergunta()).append("', ");
		builder.append(" nm_resposta_carta = '").append(carta.getResposta()).append("'");
		if (carta.getDificuldade() != 0) {
			builder.append(", cd_dificuldade = ").append(carta.getDificuldade());
		}	
		if (carta.getDataUltimaRevisao() != null) {
			builder.append(", dt_ultima_revisao_carta = '").append(date).append("'");
		}	
		builder.append(" where cd_carta = ").append(carta.getId());
		String message = acessoBanco.comandoDML(context, builder.toString());				
	}
	
	public void delete(Carta carta){
		StringBuilder builder = new StringBuilder("Delete From carta ");		
		builder.append(" where cd_carta = ").append(carta.getId());
		String message = acessoBanco.comandoDML(context, builder.toString());				
	}
	
	public int maxId(){
		String queryString = "Select max(cd_carta) from carta";
		String[] dado = acessoBanco.buscarDados(context, queryString, 1).get(0);
		return Integer.parseInt(dado[0] == null? "0" : dado[0]);
	}
}
